<!DOCTYPE html>
<html lang="en">





<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon.png">
  <link rel="icon" type="image/png" href="https://img.fungnotl.cn/basket.png">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <meta name="description" content="">
  <meta name="author" content="John Doe">
  <meta name="keywords" content="">
  <title>fungnotl的博客</title>

  <link rel="stylesheet" href="/lib/font-awesome/css/all.min.css"  >
<link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css"  >
<link rel="stylesheet" href="/lib/mdbootstrap/css/mdb.min.css"  >
<link rel="stylesheet" href="/lib/github-markdown/github-markdown.min.css"  >
<link rel="stylesheet" href="//at.alicdn.com/t/font_1067060_qzomjdt8bmp.css">


  <link rel="stylesheet" href="/lib/prettify/tomorrow-night-eighties.min.css"  >

<link rel="stylesheet" href="/css/main.css"  >


  <link rel="stylesheet" href="/lib/fancybox/jquery.fancybox.min.css"  >


</head>


<body>
  <header style="height: 100vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand"
       href="/">&nbsp;<strong>fungnotl的博客</strong>&nbsp;</a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/">主页</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/archives/">归档</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/tags/">标签</a>
          </li>
        
          
          
          <li class="nav-item">
            <a class="nav-link" href="/about/">我</a>
          </li>
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" data-toggle="modal" data-target="#modalSearch">&nbsp;&nbsp;<i
                class="iconfont icon-search"></i>&nbsp;&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>


</nav>

    <div class="view intro-2" id="background"
         style="background: url('https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/index2.jpg')no-repeat center center;
           background-size: cover;
           background-attachment: fixed;">
      <div class="full-bg-img">
        <div class="mask rgba-black-light flex-center">
          <div class="container text-center white-text fadeInUp">
            <span class="h2" id="subtitle">
              
            </span>

            
          </div>

          
            <div class="scroll-down-bar">
              <i class="fas fa-angle-down scroll-down-arrow"></i>
            </div>
          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      <div class="container nopadding-md">
        <div class="py-5 z-depth-3" id="board">
          
          <div class="container">
            <div class="row">
              <div class="col-12 col-md-10 m-auto">
                


  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2020/01/27/%E6%A1%B6%E6%8E%92%E5%BA%8F%E4%B9%8B%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F%E4%B8%8E%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/%E6%A1%B6%E6%8E%92%E5%BA%8F/Kobe.jpg" srcset="/img/loading.gif" alt="桶排序之计数排序与基数排序" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2020/01/27/%E6%A1%B6%E6%8E%92%E5%BA%8F%E4%B9%8B%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F%E4%B8%8E%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F/">
        <p class="h4 index-header">桶排序之计数排序与基数排序</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">桶排序之计数排序和基数排序桶排序
一种常见的排序算法,工作原理是将数组分到有限数量的桶子里,每个桶子再个别进行排序(会使用递归的方式继续使用桶排序进行排序或者使用其他的排序算法).

计数排序计数排序是桶排序的一种特殊情况

从图中可以看出,待排序数字在[1,9]范围内;
创建9个空桶,将待排序数字分别放在对应的桶中;
再依次将桶中的元素按照桶的顺序拿出;

代码实现:
public class CountSort {
    public static void main(String[] args) {
        int[] arr = {2, 4, 2, 3, 7, 1, 1, 1, 0, 5, 6, 9, 8, 7, 4, 0, 9};
        int[] result = sort(arr);
        System.out.println(Arrays.toString(result));
    }
    static int[] sort(int[] arr){
        //新建一个数组用来存放最终的结果
        int[] res</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2020-01-27&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/%E6%A1%B6%E6%8E%92%E5%BA%8F">桶排序</a>&nbsp;
          
            <a href="/tags/%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F">计数排序</a>&nbsp;
          
            <a href="/tags/%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F">基数排序</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2020/01/01/ArrayList%E5%8A%A8%E6%80%81%E6%89%A9%E5%AE%B9%E6%BF%80%E8%B5%B7%E9%AA%8C%E8%AF%81(JDK12%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90)/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/ArrayList%E5%8A%A8%E6%80%81%E6%89%A9%E5%AE%B9/2020.png" srcset="/img/loading.gif" alt="ArrayList动态扩容及其验证(JDK12源码分析)" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2020/01/01/ArrayList%E5%8A%A8%E6%80%81%E6%89%A9%E5%AE%B9%E6%BF%80%E8%B5%B7%E9%AA%8C%E8%AF%81(JDK12%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90)/">
        <p class="h4 index-header">ArrayList动态扩容及其验证(JDK12源码分析)</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">ArrayList动态扩容(JDK12)最近有在温习一下java容器,今天就开始读一下ArrayList的动态扩容
ArrayList是什么?
ArrayList叫做动态数组,实现了长度可变的数组, 在内存中分配连续的空间.

优缺点

优点:遍历元素和随机访问元素的效率较高缺点:添加和删除需要大量移动元素,效率低;按照内容查询效率低;


ArrayList是在object包中,继承于Collection与其子类AbstractList的.
所有实现了的接口有:Serializable(序列化), Cloneable(克隆), Iratable(迭代器),Collection(集合), List(列表),RandomAccess(随机存取)
动态扩容初始化:三个初始化方法:

默认构造器

/**
     * Constructs an empty list with an initial capacity of ten.
     * (构造一个初始容量为10的空列表)
     */
    public ArrayList() {
        this.elementDa</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2020-01-01&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/ArrayList">ArrayList</a>&nbsp;
          
            <a href="/tags/%E6%BA%90%E7%A0%81">源码</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2019/12/09/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/blog.jpg" srcset="/img/loading.gif" alt="快速搭建个人博客" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2019/12/09/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/">
        <p class="h4 index-header">快速搭建个人博客</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">前言
我一直都想拥有一个属于自己的网站,自己的博客;很开心,我做到了,这里就与大家分享一下我的搭建过程;


搭建个人博客大概有以下几个步骤:
本地环境配置:安装Node.js,Git,Hexo
阿里云服配置:域名备案,添加安全组,域名解析
服务器环境配置:安装Node.js,Git,Nginx,Pm2
github配置webhooks



注:我的本地环境为Win10,云服务器为Centos7
本地环境配置安装Node.js node.js是一个后端的JavaScript运行环境，拥有它，就可以编写系统级或者服务器端的 Javascript 代码，交给node去解释执行。
 为什么要装node？Hexo本身就是一个JS框架，里面有很多JS脚本，需要node环境去执行。
这里使用的是安装nvm管理node版本的方式，所以先安装nvm,nvm是针对node产生的一个版本控制工具，使用它可以下载和切换不同版本的node.npm是一种包管理工具，通过npm可以安装各种在npm上传的工具包。在安装node的时候npm会同时安装。后面会需要使用npm安装如hexo等工具。
 安装nvm(Nod</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2019-12-09&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8">服务器</a>&nbsp;
          
            <a href="/tags/%E9%98%BF%E9%87%8C%E4%BA%91">阿里云</a>&nbsp;
          
            <a href="/tags/%E5%9F%9F%E5%90%8D">域名</a>&nbsp;
          
            <a href="/tags/hexo">hexo</a>&nbsp;
          
            <a href="/tags/Git">Git</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2019/10/19/Java%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F%E8%AF%A6%E8%A7%A3/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/shellSort.jpg" srcset="/img/loading.gif" alt="Java希尔排序详解" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2019/10/19/Java%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F%E8%AF%A6%E8%A7%A3/">
        <p class="h4 index-header">Java希尔排序详解</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">希尔排序刚接触希尔排序的时候,我是懵的,因为在学校根本没有学过希尔排序啊!
查询资料:希尔排序是插入排序的升级版;
从维基百科截取的Java实现希尔排序的代码
public static void shellSort(int[] arr) {
        int length = arr.length;
        int temp;
        for (int step = length / 2; step &gt;= 1; step /= 2) {
            for (int i = step; i &lt; length; i++) {
                temp = arr[i];
                int j = i - step;
                while (j &gt;= 0 &amp;&amp; arr[j] &gt; temp) {
                    arr[j + step] = arr[j];
                    j -= step;
       </div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2019-10-19&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/%E6%8E%92%E5%BA%8F">排序</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2019/09/06/%E5%8E%9F%E7%A0%81,%20%E5%8F%8D%E7%A0%81,%20%E8%A1%A5%E7%A0%81%E8%AF%A6%E8%A7%A3/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/codeOFcomplement.jpg" srcset="/img/loading.gif" alt="原码,反码,补码详解" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2019/09/06/%E5%8E%9F%E7%A0%81,%20%E5%8F%8D%E7%A0%81,%20%E8%A1%A5%E7%A0%81%E8%AF%A6%E8%A7%A3/">
        <p class="h4 index-header">原码,反码,补码详解</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">﻿首先从计算机中数值数据的编码和表示说起
机器数和真值
实际运算中,数是有正负的,计算机中的数也有正负,通过用一个数的最高位表示符号,如果字长为8位,分别为D7-D0,那么D7就是符号位,0表示正数,1表示负数,D6-D0为数值位;


例如:
11010111 = -87

机器数:在计算机中,连同符号一起数码化的数,就被称为机器数;如上面的11010111;
真值:使用正负号加其绝对值的表示方法的数值;如-87
原码将最高位作为符号位（0表示正，1表示负），其它数字位代表数值本身的绝对值的数字;
如:

数字6在计算机中原码表示为:     00000110
数字 -6  在计算机中原码表示为: 10000110


注意:
以上是在8位计算机中的原码表示，如果在32位或16位计算机中，表示方法是一样的，只是多了几个0而已.

但是原码也是有缺陷的
有了数值的表示方法就可以对数进行算数运算，但是很快就发现用带符号位的原码进行乘除运算时结果正确，而在加减运算的时候会出现问题，如下：
1 - 1 = 1 + (-1) = 0

00000001 + 10000001 = 1000001</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2019-09-06&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/%E5%8E%9F%E7%A0%81">原码</a>&nbsp;
          
            <a href="/tags/%E8%A1%A5%E7%A0%81">补码</a>&nbsp;
          
            <a href="/tags/%E5%8F%8D%E7%A0%81">反码</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2019/08/10/%E4%BB%80%E4%B9%88%E6%98%AF%E5%8C%BA%E5%9D%97%E9%93%BE/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/blockChain.jpg" srcset="/img/loading.gif" alt="什么是区块链？" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2019/08/10/%E4%BB%80%E4%B9%88%E6%98%AF%E5%8C%BA%E5%9D%97%E9%93%BE/">
        <p class="h4 index-header">什么是区块链？</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">什么是区块链？
区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。简单来讲，在区块链系统中， 每过一段时间， 各参与主体产生的交易数据会被打包成一个数据区块， 数据区块按照时间顺序依次排列， 形成数据区块的链条，各参与主体拥有同样的数据链条， 且无法单方面篡改，任何信息的修改只有经过约定比例的主体同意方可进行，并且只能添加新的信息，无法删除或修改旧的信息，从而实现多主体间的信息共享和一致决策，确保各主体身份和主体间交易信息的不可篡改、 公开透明。


区块链发展到今天，已经涌现出许多形形色色的区块链项目， 这里梳理了这些区块链项目在技术上的共性： 区块、 账户、 智能合约、 共识， 这 4个主要部分构成了目前的区块链系统的通用模型 。 通过链式结构记录状态的变更历史，每一次变更的状态“快照”都以“区块” 的形式记录；通过非对称密钥对表示参与者身份，以某种形式的状态数据库记录当前的信息， 这部分被称为“账户” ；（注： 以</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2019-08-10&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/%E5%8C%BA%E5%9D%97%E9%93%BE">区块链</a>&nbsp;
          
            <a href="/tags/%E6%AF%94%E7%89%B9%E5%B8%81">比特币</a>&nbsp;
          
            <a href="/tags/%E5%88%86%E5%B8%83%E5%BC%8F">分布式</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2018/09/12/IDEA%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%A4%A7%E5%85%A8/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/IDEA.jpg" srcset="/img/loading.gif" alt="IDEA快捷键大全" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2018/09/12/IDEA%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%A4%A7%E5%85%A8/">
        <p class="h4 index-header">IDEA快捷键大全</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">Ctrl


快捷键
介绍



Ctrl + F
在当前文件进行文本查找 （必备）


Ctrl + R
在当前文件进行文本替换 （必备）


Ctrl + Z
撤销 （必备）


Ctrl + Y
删除光标所在行 或 删除选中的行 （必备）


Ctrl + X
剪切光标所在行 或 剪切选择内容


Ctrl + C
复制光标所在行 或 复制选择内容


Ctrl + D
复制光标所在行 或 复制选择内容，并把复制内容插入光标位置下面 （必备）


Ctrl + W
递进式选择代码块。可选中光标所在的单词或段落，连续按会在原有选中的基础上再扩展选中范围 （必备）


Ctrl + E
显示最近打开的文件记录列表 （必备）


Ctrl + N
根据输入的 类名 查找类文件 （必备）


Ctrl + G
在当前文件跳转到指定行处


Ctrl + J
插入自定义动态代码模板 （必备）


Ctrl + P
方法参数提示显示 （必备）


Ctrl + Q
光标所在的变量 / 类名 / 方法名等上面（也可以在提示补充的时候按），显示文档内容


Ctrl + U
前往当前光标所在的方</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2018-09-12&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/IDEA">IDEA</a>&nbsp;
          
            <a href="/tags/%E5%BF%AB%E6%8D%B7%E9%94%AE">快捷键</a>&nbsp;
          
        
      </div>
    </div>
  </div>

  <div class="row mb-4 mx-auto">
    
    
      <div class="col-12 col-md-4 m-auto">
        <a href="/2018/08/07/vi_vim%20%E7%9A%84%E4%BD%BF%E7%94%A8/" target="_self">
          <img src="https://fungnotl-img.oss-cn-hangzhou.aliyuncs.com/vimAndvi.png" srcset="/img/loading.gif" alt="VI/VIM的使用" class="img-fluid rounded z-depth-3 index-thumbnails">
        </a>
      </div>
    
    <div class="col-12 col-md-8 m-auto">
      <a href="/2018/08/07/vi_vim%20%E7%9A%84%E4%BD%BF%E7%94%A8/">
        <p class="h4 index-header">VI/VIM的使用</p>
        
        
          
        
        <div class="index-excerpt" >
          <div class="index-text mb-1">vi/vim 的使用基本上 vi/vim 共分为三种模式，分别是命令模式（Command mode），输入模式（Insert mode）和底线命令模式（Last line mode）。 这三种模式的作用分别是：
命令模式：用户刚刚启动 vi/vim，便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令，而非输入字符。比如我们此时按下i，并不会输入一个字符，i被当作了一个命令。
以下是常用的几个命令：

i 切换到输入模式，以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式，以在最底一行输入命令。若想要编辑文本：启动Vim，进入了命令模式，按下i，切换到输入模式。

命令模式只有一些最基本的命令，因此仍要依靠底线命令模式输入更多命令。
输入模式在命令模式下按下i就进入了输入模式。
在输入模式中，可以使用以下按键：

字符按键以及Shift组合，输入字符
Enter，回车键，换行
Backspace，退格键，删除光标前一个字符
Delete，删除键，删除光标后一个字符
方向键，在文本中移动光标
HOME/END，移动光标到行首/行尾
Page Up/Page Do</div>
        </div>
      </a>

      <div>
        
          <i class="iconfont icon-riqi2"></i>&nbsp;2018-08-07&nbsp;&nbsp;
        
        
        
          <i class="iconfont icon-tag"></i>
          
            <a href="/tags/VI">VI</a>&nbsp;
          
            <a href="/tags/VIM">VIM</a>&nbsp;
          
        
      </div>
    </div>
  </div>





              </div>
            </div>
          </div>
        </div>
      </div>
    
  </main>

  
    <a class="z-depth-1" id="scroll-top-button" href="#" role="button">
      <i class="fa fa-chevron-up scroll-top-arrow" aria-hidden="true"></i>
    </a>
  

  
    <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">Search</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">keyword</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
  

  <footer class="mt-5">
  <div class="text-center py-3">
    <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><b>Hexo</b></a>
    <i class="iconfont icon-love"></i>
    <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"> <b>Fluid</b></a>
    <br>

    
  
    <!-- 不蒜子统计PV -->
    
    &nbsp;<span id="busuanzi_container_site_pv">总访问量 
          <span id="busuanzi_value_site_pv"></span> 次</span>&nbsp;
  
  
    <!-- 不蒜子统计UV -->
    
    &nbsp;<span id="busuanzi_container_site_uv">总访客数 
            <span id="busuanzi_value_site_uv"></span> 人</span>&nbsp;
  
  <br>



    
  <!-- 备案信息 -->
  <a href="http://beian.miit.gov.cn/" target="_blank"
     rel="nofollow noopener">浙ICP备19040843号</a>
  


  </div>
</footer>

<!-- SCRIPTS -->
<script src="/lib/jquery/jquery.min.js" ></script>
<script src="/lib/popper/popper.min.js" ></script>
<script src="/lib/bootstrap/js/bootstrap.min.js" ></script>
<script src="/lib/mdbootstrap/js/mdb.min.js" ></script>
<script src="/js/main.js" ></script>


  <script src="/js/lazyload.js" ></script>





  <script src="/lib/smooth-scroll/smooth-scroll.min.js" ></script>



  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" ></script>


<!-- Plugins -->


  

  

  

  

  




  <script src="/lib/prettify/prettify.min.js" ></script>
  <script>
    $(document).ready(function () {
      $('pre').addClass('prettyprint  linenums');
      prettyPrint();
    })
  </script>



  <script src="/lib/typed/typed.min.js" ></script>
  <script>
    var typed = new Typed('#subtitle', {
      strings: [
        '  ',
        "但行好事, 莫问前程&nbsp;",
      ],
      cursorChar: "_",
      typeSpeed: 50,
      loop: false,
    });
    typed.stop();
    $(document).ready(function () {
      $(".typed-cursor").addClass("h2");
      typed.start();
    });
  </script>



  <script src="/lib/anchor/anchor.min.js" ></script>
  <script>
    anchors.options = {
      placement: "right",
      visible: "false",
      
    };
    var el = "h1,h2,h3,h4,h5,h6".split(",");
    var res = [];
    for (item of el) {
      res.push(".markdown-body > " + item)
    }
    anchors.add(res.join(", "))
  </script>



  <script src="/js/local-search.js" ></script>
  <script>
    var path = "/local-search.xml";
    var inputArea = document.querySelector("#local-search-input");
    inputArea.onclick = function () {
      getSearchFile(path);
      this.onclick = null
    }
  </script>



  <script src="/lib/fancybox/jquery.fancybox.min.js" ></script>
  <script>
    $("#post img:not(.no-zoom img, img[no-zoom])").each(
      function () {
        var element = document.createElement("a");
        $(element).attr("data-fancybox", "images");
        $(element).attr("href", $(this).attr("src"));
        $(this).wrap(element);
      }
    );
  </script>





  





</body>
</html>
